<?php

/*
 * Table/ContratTypeTable.php
 */

namespace RHX\Model\Table;

use RHX\Model\Object\ContratType;
use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Where;

class ContratTypeTable extends AbstractTableGateway {

    /**
     * Nom de la table
     *
     * @var string
     */
    protected $table = 'rh_contrat_type';

    /**
     * Constructeur
     *
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter) {
	$this->adapter			 = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new ContratType());
	$this->initialize();
    }

    /**
     * Tous les Types de contrat
     *
     * @param string $order
     * @return Collection
     */
    public function getAll($order = 'libelle ASC') {
	return $this->select(function(Select $select)use($order) {
			    $where = new Where();
			    $where->greaterThan('id', 0);
			    $select->where($where);
			    $select->order($order);
			});
    }

    /**
     * Liste des Types de Contrat pour une utilisation dans une zone de liste
     * 
     * @param string $order
     * @return array
     */
    public function getList($order = 'libelle ASC') {
	$rows = $this->select(function(Select $select) use($order) {
		    $select->order($order);
		});
	$list = array();
	// Parcours de la liste
	foreach ($rows as $r) {
	    $list[$r->id] = $r->libelle;
	}

	return $list;
    }

    /**
     * Un type de Contrat
     *
     * @param type $id
     * @return ContratType
     * @throws \Exception
     */
    public function get($id) {
	$row = $this->select(array('id' => $id))->current();
	if (!$row) {
	    throw new \Exception("Impossible de trouver #$id");
	}

	return $row;
    }

    /**
     * Effacer un type de contrat
     *
     * @param int $id
     * @return int Nombre d'enregistrement effacé
     */
    public function erase($id) {
	return $this->delete(array('id' => $id));
    }

    /**
     * Sauvegarder un Contrat Type
     * 
     * @param \RHX\Model\Object\ContratType $type
     * @return int L'identifiant de l'enregistrement enregistré
     * @throws \Exception
     */
    public function save(ContratType $type) {
	$data	 = array(
	    'libelle'	 => $type->libelle,
	    'abrev'		 => $type->abrev,
	    'coef'		 => $type->coef,
	);
	$id	 = (int) $type->id;
	if ($id == 0) {
	    $this->insert($data);

	    return $this->lastInsertValue;
	}
	elseif ($this->get($id)) {
	    $this->update($data, array('id' => $id));

	    return $id;
	}
	else {
	    throw new \Exception("Impossible de mettre à jour #$id");
	}
    }

}

?>
